<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        var c = console.log.bind(document)



        // // 数组方法
        // // 将数组转成字符串并以字符分隔
        // // join
        
        // // 传统方法
        // var arr = ['a',0,1,2,3]
        // var str = ','
        // for(var i=0;i<arr.length;i++){
        //     // arr[i] +=str
        //     str+=arr[i]
        // }
        // c(arr)  //  ['a,', '0,', '1,', '2,', '3,']
        // c(str)  //  ,a0123

        // // 数组方法
        // var arr = ['a',0,1,2,3]
        // c(arr.join())       //  a,0,1,2,3  不加参数默认以逗号分隔
        // c(arr.join(','))    //  a,0,1,2,3
        // c(arr.join(''))     //  a0123
        // c(arr.join('-'))    //  a-0-1-2-3 



        // 数组截取方法
        // arr.slice
        // 格式： arr.slise(开始下标,结束下标)
        // 作用: 截取数组中的数据并返回一个新数组
        // var arr = ['a','b','v','d']
        // var newArr = arr.slice()  // 没有参数默认全部截取,类似于复制
        // c(arr)          // ['a', 'b', 'v', 'd']
        // c(newArr)       // ['a', 'b', 'v', 'd']
        // arr[0] = 10

        // c(arr)             //  [10, 'b', 'v', 'd']  
        // c(newArr)          //  ['a', 'b', 'v', 'd']  新数组不会受影响

        // c(arr.slice())          // ['a', 'b', 'v', 'd']  
        // c(arr.slice(1))         // ['b', 'v', 'd']       
        // c(arr.slice(1,5))       // ['b', 'v', 'd']       
        // c(arr.slice(1,-1))      // ['b', 'v']            
        // c(arr.slice(1,0))       // []
        // c(arr.slice(-1,3))      // []
        // c(arr.slice(-3,3))      // ['b', 'v']
        // c(arr.slice(-2,3))      // ['v']


        // 增加与删除
        // arr.push()    在尾部增加,可以同时增加多个,用 逗号 隔开,返回增加后的数组
        // arr.pop()     在尾部删除,一次只能删除一个,返回被删除的数据,不能指定删除哪一个
        // arr.unshift() 在头部增加,可以同时增加多个,用 逗号 隔开,返回增加后的数组
        // arr.shift()   在头部删除,一次只能删除一个,返回被删除的数据,不能指定删除哪一个

        // 模拟栈增加删除
        // var arr = []
        // arr.push('老大')
        // arr.push('老二')
        // c(arr)      //  ['老大', '老二']
        // c(arr.length)
        // arr.pop()
        // c(arr)      //  ['老大']
        // arr.unshift('11')
        // arr.unshift('22')
        // c(arr)      //  ['22', '11', '老大']
        // arr.shift()
        // c(arr)      //  ['11', '老大']


        // 数组的排序-sort
            // 格式: arr.sort()
            // var arr1 = [1,2,3,4,4,55555,6]
            // arr1.sort(function(a,b){
              
            //     // 不写就默认排序
            //     // return       // [1, 2, 3, 4, 4, 55555, 6]
               
            //     // a-b = 从小到大排列
            //     // return b-a   // [55555, 6, 4, 4, 3, 2, 1]
               
            //     // b-a = 从大到小排列
            //     // return a-b   // [1, 2, 3, 4, 4, 6, 55555]
            // })

            // 这里 输出的是已经转换完成的arr1
            // c(arr1)     // [1, 2, 3, 4, 4, 6, 55555]

    // 数据迭代
        // 在js中数据迭代通俗来讲就是遍历数组的意思,类似for循环,有五个迭代的方式
        // 他们的相同点是都可以接收三个参数value(每一项)index(下标)array(对象本身)
        // var arr = [1,23,4,5]
        // var f = arr.some(function(value,index,array){
        //     c(value)
        //     c(index)
        //     c(array)
        // })
        // c(f)

        // every
        
    //    格式: arr.every()
        // 特点:所有都为真就为真,有一个为假就为假
        // 作用:根据数组元素做判断,数组的每一项都会执行函数,执行的结果全为真就为真,否则为假
        var arr = [9,23,4,5]
        // var f = arr.every(function(value,index,array) {
        //     // return value > 3
        //     return value > 5
        // })
        // c(f)

        // var f = arr.some(function(value,index,array){
        //     return value > 21
        // })
        // c(f)  // true

        // filter
        // 格式: arr.filter()
        // 特点: 通常用于筛选,每一个项都会执行定义的函数,满足条件的项合并成一个新数组并返回
        // var arr = [9,23,4,5]
        // var f = arr.filter(function(value,index,array){
        //     return value>5
        // })
        // c(f)

          //筛选出分数大于等于90的同学
    // var arr = [
    //     {
    //         name:"范冰冰",
    //         num:95
    //     },{
    //         name:"李冰冰",
    //         num:96
    //     },{
    //         name:"王冰冰",
    //         num:90
    //     },{
    //         name:"温碧霞",
    //         num:89
    //     },{
    //         name:"王祖贤",
    //         num:81
    //     }
    // ]

    // var f = arr.filter(function(value,index,array){
    //     return value.num > 90
    // })
    // c(f)

// var arr = ['1',2,undefined,0,null]
// c(arr.filter(Boolean))
        

// Map
// 格式:arr.map()
// 特点:每一个项都会执行定义的函数,执行结果返回组成一个新的数组
// var arr = [1,4,5,6,6,22]
// var f = arr.map(function(value){
//     value > 0
//     return "<li>" + value + "</li>"
// }).join()
// c(f)    // <li>1</li>,<li>4</li>,<li>5</li>,<li>6</li>,<li>6</li>,<li>22</li>

// // 转换数类型
// var arr = [1,2,4,'asd',undefined,false,null]
// var f1 = arr.map(String)
// var f2 = arr.map(Boolean)
// var f3 = arr.map(Number)
// c(f1)  //   ['1', '2', '4', 'asd', 'undefined', 'false', 'null']
// c(f2)  //   [true, true, true, true, false, false, false]
// c(f3)  //   [1, 2, 4, NaN, NaN, 0, 0]


//给数组的每一个对象添加一个id
    // var arr = [
    //     {
    //         name:"范冰冰",
    //         num:95
    //     },{
    //         name:"李冰冰",
    //         num:96
    //     },{
    //         name:"王冰冰",
	// 		num:90
    //     },{
    //         name:"温碧霞",
    //         num:89
    //     },{
    //         name:"王祖贤",
    //         num:81
    //     }
    // ]
    // arr.forEach(function(value,index,array){
    //     value.id = index+1
    // })
    // c(arr)
    // var arr = [1,2,4,'asd',undefined,false,null]
    // c(arr.includes('asd'))  //  true
    // c(arr.includes(3))      //  false
    // c(arr.includes(1))      //  true

    // flat()
    // 作用: 把数组按照特定的深度遍历递归数组,并把所有元素和子数组的值合并到一个新数组中
    // 格式:   arr.flat(指定的深度)
    // 当指定的深度没有参数时,默认为1
    // flat方法会移除数组中的所有空值
    // 应用场景:当一个数组中含有一个或多个子数组,并且想把该数组的元素全部遍历出来时可以使用arr.flat()
    var arr = ['a','f',2,['a',533,14]]
    
    c(arr.flat(Infinity))
    

</script>
</body>
</html>